package shujia.day06;

/*
    java为了描述现实生活中额外扩展功能的现象，提供了一个关键字给我们使用，interface
    可以使用该关键字定义一个接口，接口中定义额外的方法【扩展功能】
    接口其实可以被看作一个特殊类，也是会被JVM编译成一个class文件的

    接口中成员的特点：
        1、接口中不能有构造方法，自己写都不允许，接口不能实例化
        2、接口中的方法只能是抽象方法
        3、一个类要想实现一个接口的话，需要使用关键字implements
            class A implements 接口1{

            }
        4、当一个具体的类实现一个接口的时候，必须实现接口中所有的抽象方法

 */
abstract class Animal4{
    public abstract void eat();

    public abstract void sleep();
}

class Dog4 extends Animal4{

    @Override
    public void eat() {
        System.out.println("🐕吃🥩");
    }

    @Override
    public void sleep() {
        System.out.println("🐕侧着睡");
    }
}

//定义一个接口
interface ByCycle{
//    public void cycle(){
//        System.out.println("骑车");
//    }

    public abstract void cycle();
}

class ByBikeDog extends Dog4 implements ByCycle{

    @Override
    public void cycle() {
        System.out.println("狗会骑车！");
    }
}

public class InterfaceDemo1 {
    public static void main(String[] args) {
//        ByCycle byCycle = new ByCycle();
        //创建一个普通的小狗
        Dog4 dog4 = new Dog4();
        dog4.eat();
        dog4.sleep();
//        dog4.cycle();
        System.out.println("-----------------------------");
        //创建一个会骑车的小狗
        ByBikeDog byBikeDog = new ByBikeDog();
        byBikeDog.eat();
        byBikeDog.sleep();
        byBikeDog.cycle();

    }
}
